AWS CLIでコマンド実行時、時折発生する「TooManyRequestsException」エラーを回避するには
困っていた内容
AWS CLIでdescribeやget系のコマンド実行時、時々TooManyRequestsException
エラーが発生してコマンドが失敗します。
再度コマンドを実行すると成功するのですが、なるべくコマンドが失敗しないようにするにはどうしたらいいでしょうか。
どう対応すればいいの??
AWS CLIの再試行回数を増やすことをお試しください。
AWS CLIバージョン2の場合、デフォルトの再試行回数は2回で、初回呼び出しと合わせると合計3回コマンドが呼び出されます。
最大再試行回数のデフォルト値は 2 で、合計で 3 回呼び出しが試みられます。この値は、max_attempts 設定パラメータを使用して上書きできます。
引用元:AWS CLI の再試行
この最大再試行回数の値を増やすことで、TooManyRequestsException
によりコマンドが失敗する可能性を減らすことができます。
設定は、環境変数や設定ファイル(~/.aws/config)より変更可能です。
再試行環境変数は次のとおりです。
・ AWS_RETRY_MODE
・ AWS_MAX_ATTEMPTS以下は AWS 設定ファイルの例です。
[default] retry_mode = standard max_attempts = 6引用元:AWS CLI の再試行
なお、max_attemptsに指定する値は、最大試行回数であり、再試行する回数ではありません。
再試行回数は、max_attemptsに指定した値に1
を引いた数です。
例えば、max_attemptsに3を指定した場合、1回実行して失敗した後、2回再試行(リトライ)します。
設定してみた
CloudShell上で設定しています。
なお、以下では再試行回数を減らしていますが、実際に設定する際は増やしてください。
$ aws --version aws-cli/2.6.3 Python/3.9.11 Linux/4.14.275-207.503.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off
AWS CLIのバージョンが2のため、デフォルトの再試行回数は2回です。
実際にTooManyRequestsException
エラーが発生した際、reached max retries: 2
と出力されました。
An error occurred (TooManyRequestsException) when calling the xxx operation (reached max retries: 2): Too Many Requests
環境変数で設定
AWS_MAX_ATTEMPTS
環境変数を設定します。
$ export AWS_MAX_ATTEMPTS=2 $ echo $AWS_MAX_ATTEMPTS 2
エラーが発生した際、reached max retries: 1
と表示されたので、反映していることが分かります。
An error occurred (TooManyRequestsException) when calling the xxx operation (reached max retries: 1): Too Many Requests
設定ファイルで設定
~/.aws/config
設定ファイルを作成し、max_attempts
を設定します。
なお、環境変数でも設定している場合、環境変数で指定した値が優先されるのでお気をつけください。
$ cd $ mkdir .aws $ touch .aws/config $ vi .aws/config
[default] max_attempts = 1
エラーが発生した際、reached max retries: 0
と表示されたので、設定変更の反映が確認できました。
An error occurred (TooManyRequestsException) when calling the xxx operation (reached max retries: 0): Too Many Requests